To handle multiple users simultaneously accessing data, many storage systems implement multiversioning, which is the ability to provide multiple versions of data at the same time. Multiversioning concurrency control (MVCC) is commonly used to achieve snapshot isolation in transactional database systems. Snapshot isolation guarantees that all reads done in a particular transaction will see a consistent view of the database and that the transaction will commit only if no transactional updates conflict with any concurrent updates that may have been made to the database since the snapshot. Many systems use locking for concurrency control and also employ multiversioning to support snapshot reads that do not block, and are not blocked by, read-write transactions. Additionally, many software applications use multiversioning in database systems to run “time-travel” queries against consistent historical snapshots, or read-only static views for a given time period, of a database for both analytical and data auditing purposes.
While multiversioning may allow simultaneous access to a storage system, indexing may be useful for making the data querying process faster for users. An index is an inverted mapping from values to the keys of data items in which those values appear. In order to query database snapshots at different points in time, multiversioning storage systems must implement indexing systems that can reconstruct the instantaneous state of this inverted value-key mapping for any specified historical timestamp.